package com.study.springboot.common.util;


import com.study.springboot.common.constant.GlobalConsts;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:Jwt工具类
 * @Author: zhaowei
 * @Date: 2021/4/19 9:15
 **/
public class JwtTokenUtil {

    /**
     * @param claims
     * @param secret
     * @param expireTime
     * @return java.lang.String
     * @author wei.zhao
     * @date 2021/12/1 18:03
     * @description 生成token
     */
    public static String createToken(Map<String, Object> claims, String secret, Integer expireTime) {
        //Jwt头
        Map<String, Object> header = new HashMap<>();
        header.put("typ", "JWT");
        header.put("alg", "HS256");
        return Jwts.builder()
                //发证人
                .setIssuer(GlobalConsts.JWT_ISS)
                //Jwt头
                .setHeader(header)
                //有效载荷
                .setClaims(claims)
                //设定签发时间
                .setIssuedAt(new Date())
                //设定过期时间
                .setExpiration(new Date(System.currentTimeMillis() + expireTime * 1000))
                //使用HS256算法签名，PRIVATE_KEY为签名密钥
                .signWith(SignatureAlgorithm.HS256, secret)
                .compact();
    }

    /**
     * @param token
     * @param secret
     * @return io.jsonwebtoken.Claims
     * @author wei.zhao
     * @date 2021/12/1 18:04
     * @description 获取有效载荷
     */
    public static Claims getClaimsFromToken(String token, String secret) {
        Claims claims = null;
        try {
            claims = Jwts.parser()
                    //设定解密私钥
                    .setSigningKey(secret)
                    //传入Token
                    .parseClaimsJws(token)
                    //获取载荷类
                    .getBody();
        } catch (Exception e) {
            return null;
        }
        return claims;
    }
}
